//「一本通 3.1 练习 2」构造完全图
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN=100000;
int n;
struct Edge
{
   int u,v,w;
   bool operator<(const Edge other)const {
       return w<other.w;
   }
};
Edge edges[MAXN+1];
struct UFS_Node{
    int head,last,next,size;
};
struct UFS{
    UFS_Node ele[MAXN+1];
    void init(){
        for(int i=1;i<=n;i++) ele[i]={i,i,0,1};
    }
    int find_set(int x){
        return ele[x].head;
    }
    void addto(int hx,int hy){
        ele[ele[hx].last].next=hy;
        ele[hx].last=ele[hy].last;
        ele[hx].size+=ele[hy].size;
        while (hy>0){
            ele[hy].head=hx;
            hy=ele[hy].next;
        }
    }
    void union_set(int x,int y){
        int hx=find_set(x);
        int hy=find_set(y);
        if (hx!=hy) {
            if (ele[hx].size>=ele[hy].size) addto(hx,hy);//注意是小集合加入到大集合中
            else addto(hy,hx);
        }
    }
};
UFS ufs;
long long ans;
int main(){
    cin>>n;
    for(int i=0;i<n-1;i++){
        cin>>edges[i].u>>edges[i].v>>edges[i].w;
    }
    sort(edges,edges+n-1);
    ufs.init();
    for(int i=0;i<n-1;i++){
        int ru=ufs.find_set(edges[i].u);
        int rv=ufs.find_set(edges[i].v);
        if (ru!=rv){
            ans+=edges[i].w;
            ans+=((long long)ufs.ele[ru].size*ufs.ele[rv].size-1)*(edges[i].w+1);//当最小生成树的边加进来时，两个子集的点可以组成
            //ufs.ele[ru].size*ufs.ele[rv].size条边，除去当前生成树上的这一条边，其他条边只要权值比当前这边的权值大1，就不会
            //构成新的生成树，保证了只有一颗生成树，并且权值和最小。
            ufs.union_set(ru,rv);
        }
    }
    cout<<ans;
}